package com.endes.android.model.dao;

import java.util.ArrayList;
import java.util.List;

import android.R.integer;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.endes.android.entidades.SSEC1C;
import com.endes.android.entidades.SSECNIN;
import com.endes.android.entidades.SSECVISIT;
import com.endes.android.model.database.EndesOpenHelper;
import com.endes.android.view.hogar.CaratulaActivity;

public class QSCaratulaDao {
	private EndesOpenHelper endesOpenHelper;
	private SQLiteDatabase db;
	private Cursor cursor = null;
	private Context context;

	public QSCaratulaDao(Context context) {
		this.context = context;
		endesOpenHelper = new EndesOpenHelper(context);

	}

	public SSEC1C ObtenerCaratula(int qsCluster, int qsNumber, int qsHome) {
		SSEC1C ssec1c = null;
		db = endesOpenHelper.getReadableDatabase();
		cursor = db
				.rawQuery(
						"Select * from SSEC1C where qsCluster=? and qsNumber=? and qsHome=?",
						new String[] { qsCluster + "", qsNumber + "",
								qsHome + "" });
		if (cursor.moveToFirst()) {
			ssec1c = new SSEC1C();
			ssec1c.setQsCluster(qsCluster);
			ssec1c.setQsNumber(qsNumber);
			ssec1c.setQsHome(qsHome);
			ssec1c.setQsNombre(cursor.getString(cursor
					.getColumnIndex("qsNombre")));
			ssec1c.setQsNumero(cursor.getInt(cursor.getColumnIndex("qsNumero")));
			ssec1c.setQsIntd(cursor.getInt(cursor.getColumnIndex("qsIntd")));
			ssec1c.setQsIntm(cursor.getInt(cursor.getColumnIndex("qsIntm")));
			ssec1c.setQsInty(cursor.getInt(cursor.getColumnIndex("qsInty")));
			ssec1c.setQsEquipo(cursor.getInt(cursor.getColumnIndex("qsEquipo")));
			ssec1c.setQsEntrev(cursor.getInt(cursor.getColumnIndex("qsEntrev")));
			ssec1c.setQsTotVisit(cursor.getInt(cursor
					.getColumnIndex("qsTotVisit")));
			ssec1c.setQsResult(cursor.getInt(cursor.getColumnIndex("qsResult")));
			ssec1c.setQsResultX(cursor.getString(cursor
					.getColumnIndex("qsResultX")));
			ssec1c.setQsNinos(cursor.getInt(cursor.getColumnIndex("qsNinos")));
			ssec1c.setQsResInf(cursor.getInt(cursor.getColumnIndex("qsResInf")));
			ssec1c.setQsSuperv(cursor.getInt(cursor.getColumnIndex("qsSuperv")));
			ssec1c.setQsOEdit(cursor.getInt(cursor.getColumnIndex("qsOEdit")));
			ssec1c.setQsDigitad(cursor.getInt(cursor
					.getColumnIndex("qsDigitad")));
		}
		Cerrar();
		return ssec1c;
	}

	public void guardarCaratulaIniciarEncuesta(SSEC1C ssec1c) {
		ContentValues contenido = new ContentValues();
		contenido.put("qsNombre", ssec1c.getQsNombre());
		contenido.put("qsNumero", ssec1c.getQsNumero());
		if (ExisteSSEC1C(ssec1c)) {
			db = endesOpenHelper.getWritableDatabase();
			db.update(
					"SSEC1C",
					contenido,
					"qsCluster=? and qsNumber=? and qsHome=?",
					new String[] { ssec1c.getQsCluster() + "",
							ssec1c.getQsNumber() + "", ssec1c.getQsHome() + "" });
			db.close();
		} else {
			db = endesOpenHelper.getWritableDatabase();
			contenido.put("qsCluster", ssec1c.getQsCluster());
			contenido.put("qsNumber", ssec1c.getQsNumber());
			contenido.put("qsHome", ssec1c.getQsHome());
			db.insert("SSEC1C", null, contenido);
			db.close();
		}
	}

	public boolean ExisteSSEC1C(SSEC1C ssec1c) {
		db = endesOpenHelper.getReadableDatabase();
		cursor = db
				.rawQuery(
						"Select * from SSEC1C where qsCluster=? and qsNumber=? and qsHome=?",
						new String[] { ssec1c.getQsCluster() + "",
								ssec1c.getQsNumber() + "",
								ssec1c.getQsHome() + "" });
		if (cursor.moveToFirst()) {
			Cerrar();
			return true;
		} else {
			Cerrar();
			return false;
		}
	}

	public int existeRegistroCaratula(int conglomerado, int vivienda, int hogar) {
		db = endesOpenHelper.getReadableDatabase();
		cursor = db
				.rawQuery(
						"Select * from SSEC1C where qsCluster=? and qsNumber=? and qsHome=?",
						new String[] { conglomerado + "", vivienda + "",
								hogar + "" });
		return cursor.getCount();
	}

	public List<SSECNIN> ObtenerCaratulaParteNinios(int qsCluster,
			int qsNumber, int qsHome) {
		List<SSECNIN> listSsecNin = null;
		db = endesOpenHelper.getReadableDatabase();
		cursor = db
				.rawQuery(
						"Select * from SSECNIN where qsCluster=? and qsNumber=? and qsHome=?",
						new String[] { qsCluster + "", qsNumber + "",
								qsHome + "" });
		if (cursor.moveToFirst()) {
			listSsecNin = new ArrayList<SSECNIN>();
			while (!cursor.isAfterLast()) {
				SSECNIN obj = new SSECNIN();
				obj.setQsCluster(qsCluster);
				obj.setQsNumber(qsNumber);
				obj.setQsHome(qsHome);
				obj.setQsOrdNin(cursor.getInt(cursor.getColumnIndex("qsOrdNin")));
				obj.setQsResNin(cursor.getInt(cursor.getColumnIndex("qsResNin")));
				listSsecNin.add(obj);
				cursor.moveToNext();
			}
		}
		Cerrar();
		return listSsecNin;
	}

	public void guardarCaratulaParteNinios(SSECNIN ssecnin) {
		ContentValues contenido = new ContentValues();
		contenido.put("qsOrdNin", ssecnin.getQsOrdNin());
		contenido.put("qsResNin", ssecnin.getQsResNin());
		if (ExisteSSECNIN((ssecnin))) {
			db = endesOpenHelper.getWritableDatabase();
			db.update("SSECNIN", contenido,
					"qsCluster=? and qsNumber=? and qsHome=?", new String[] {
							ssecnin.getQsCluster() + "",
							ssecnin.getQsNumber() + "",
							ssecnin.getQsHome() + "" });
			db.close();
		} else {
			db = endesOpenHelper.getWritableDatabase();
			contenido.put("qsCluster", ssecnin.getQsCluster());
			contenido.put("qsNumber", ssecnin.getQsNumber());
			contenido.put("qsHome", ssecnin.getQsHome());
			db.insert("SSECNIN", null, contenido);
			db.close();
		}
	}

	public boolean ExisteSSECNIN(SSECNIN ssecnin) {
		db = endesOpenHelper.getReadableDatabase();
		cursor = db
				.rawQuery(
						"Select * from SSECNIN where qsCluster=? and qsNumber=? and qsHome=?",
						new String[] { ssecnin.getQsCluster() + "",
								ssecnin.getQsNumber() + "",
								ssecnin.getQsHome() + "" });
		if (cursor.moveToFirst()) {
			Cerrar();
			return true;
		} else {
			Cerrar();
			return false;
		}
	}

	public SSECVISIT ObtenerCaratulaParteVisitas(int qsCluster, int qsNumber,
			int qsHome, int qsNumeroOrden, String fechaActual) {
		SSECVISIT ssecvisit = null;
		db = endesOpenHelper.getReadableDatabase();
		cursor = db
				.rawQuery(
						"Select * from SSECVISIT where qsCluster=? and qsNumber=? and qsHome=? and qsNumero=? and qsFechaVisit<=?",
						new String[] { qsCluster + "", qsNumber + "",
								qsHome + "", qsNumeroOrden + "", fechaActual});
		if (cursor.moveToFirst()) {
			ssecvisit = new SSECVISIT();
			ssecvisit.setQsCluster(qsCluster);
			ssecvisit.setQsNumber(qsNumber);
			ssecvisit.setQsHome(qsHome);
			ssecvisit.setQsNumeroOrden(qsNumeroOrden);
			ssecvisit.setQsFechaVisit(cursor.getString(cursor
					.getColumnIndex("qsFechaVisit")));
			ssecvisit.setQsNombre(cursor.getString(cursor
					.getColumnIndex("qsNombre")));
			ssecvisit.setQsResult(cursor.getInt(cursor
					.getColumnIndex("qsResult")));
			ssecvisit.setQsFechaProxVisit(cursor.getString(cursor
					.getColumnIndex("qsFechaProxVisit")));
			ssecvisit.setQsHoraProxVisit(cursor.getString(cursor
					.getColumnIndex("qsHoraProxVisit")));
			cursor.moveToNext();
		}
		Cerrar();
		return ssecvisit;
	}

	public void guardarCaratulaParteVisitas(SSECVISIT ssecvisit) {
		ContentValues contenido = new ContentValues();
		contenido.put("qsFechaVisit", ssecvisit.getQsFechaVisit());
		contenido.put("qsNombre", ssecvisit.getQsNombre());
		contenido.put("qsResult", ssecvisit.getQsResult());
		contenido.put("qsNumero", ssecvisit.getQsNumeroOrden());
		contenido.put("qsFechaProxVisit", ssecvisit.getQsFechaProxVisit());
		contenido.put("qsHoraProxVisit", ssecvisit.getQsHoraProxVisit());
		if (ExisteSSECVISIT((ssecvisit))) {
			db = endesOpenHelper.getWritableDatabase();
			db.update(
					"SSECVISIT",
					contenido,
					"qsCluster=? and qsNumber=? and qsHome=? and qsNumero=?",
					new String[] { ssecvisit.getQsCluster() + "",
							ssecvisit.getQsNumber() + "",
							ssecvisit.getQsHome() + "",
							ssecvisit.getQsNumeroOrden() + ""});
			db.close();
		} else {
			db = endesOpenHelper.getWritableDatabase();
			contenido.put("qsCluster", ssecvisit.getQsCluster());
			contenido.put("qsNumber", ssecvisit.getQsNumber());
			contenido.put("qsHome", ssecvisit.getQsHome());
			contenido.put("qsNumero", ssecvisit.getQsNumeroOrden());
			db.insert("SSECVISIT", null, contenido);
			db.close();
		}

	}

	public boolean ExisteSSECVISIT(SSECVISIT ssecvisit) {
		db = endesOpenHelper.getReadableDatabase();
		cursor = db
				.rawQuery(
						"Select * from SSECVISIT where qsCluster=? and qsNumber=? and qsHome=? and qsNumero=?",
						new String[] { ssecvisit.getQsCluster() + "",
								ssecvisit.getQsNumber() + "",
								ssecvisit.getQsHome() + "",
								ssecvisit.getQsNumeroOrden() + ""});
		if (cursor.moveToFirst()) {
			Cerrar();
			return true;
		} else {
			Cerrar();
			return false;
		}
	}
	
	public List<List<Object>> obtenerListaNombresPersonas(int qsCluster, int qsNumber, int qsHome){
		int id = 0;
		List<Object> obtenerNombrePersonas = new ArrayList<Object>();
		List<Object> obtenerNumeroOrden = new ArrayList<Object>();
		List<List<Object>> obtenerListaNombresPersonas = new ArrayList<List<Object>>();
		db = endesOpenHelper.getReadableDatabase();
		cursor = db
				.rawQuery(
						"Select id from HOUSEHOLD where QHCLUSTER=? and QHNUMBER=? and QHHOME=?",
						new String[] { qsCluster + "", qsNumber + "",
								qsHome + ""});
		if (cursor.moveToFirst()) {
			id = cursor.getInt(cursor.getColumnIndex("id"));
		}
		cursor = db
				.rawQuery(
						"Select QHORDEN, QHNAME, QHSEXO from HOUSEHOLD_SEC02 where form_id=?",
						new String[] { id + ""});
		if (cursor.moveToFirst()) {
			while (!cursor.isAfterLast()) {
				SSEC1C caratula = new SSEC1C();
				caratula.setQsNombre(cursor.getString(cursor
						.getColumnIndex("QHNAME")));
				obtenerNombrePersonas.add(caratula.getQsNombre());
				caratula.setQsNumero(cursor.getInt(cursor
						.getColumnIndex("QHORDEN")));
				obtenerNumeroOrden.add(caratula.getQsNumero());
				cursor.moveToNext();
			}
			obtenerListaNombresPersonas.add(obtenerNombrePersonas);
			obtenerListaNombresPersonas.add(obtenerNumeroOrden);
		}
		return obtenerListaNombresPersonas;
	}

	public void Cerrar() {
		cursor.close();
		db.close();
	}

}
